/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ManagedBeans;

import ComponenteDatos.NumeracioncomprobanteFacadeLocal;
import ComponenteDatos.SeriecomprobanteFacadeLocal;
import ComponenteDatos.VentasFacadeLocal;
import ComponenteDatos.ViajeFacadeLocal;
import ComponenteEntidad.Agencia;
import ComponenteEntidad.Bus;
import ComponenteEntidad.Cliente;
import ComponenteEntidad.Empleado;
import ComponenteEntidad.Igv;
import ComponenteEntidad.Numeracioncomprobante;
import ComponenteEntidad.Seriecomprobante;
import ComponenteEntidad.Tipocomprobante;
import ComponenteEntidad.Tipodocumentoidentidad;
import ComponenteEntidad.Tipopago;
import ComponenteEntidad.Ventas;
import ComponenteEntidad.Viaje;
import com.lowagie.text.Chunk;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;
import java.awt.Color;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Serializable;
import java.math.BigInteger;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.LinkedList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import org.primefaces.event.SelectEvent;
import org.primefaces.event.UnselectEvent;

/**
 *
 * @author ANTHONY
 */
@ManagedBean
@SessionScoped
public class ManagedBeanVenta implements Serializable {

    @EJB
    private ViajeFacadeLocal viajeFacade;
    @EJB
    private NumeracioncomprobanteFacadeLocal numeracioncomprobanteFacade;
    @EJB
    private SeriecomprobanteFacadeLocal seriecomprobanteFacade;
    @EJB
    private VentasFacadeLocal ventasFacade;
    private Cliente objetoCliente;
    private Ventas objetoVentas;
    private Ventas objetoVentasMostrar;
    private Ventas objetoVentasMostrarSerie;
    private List<Ventas> lista;
    private List<String> images = new ArrayList<String>();
    private Viaje ObjetoViaje;
    private int numeroAsiento = 0;
    private int numeroAsientoMostrando = 0;
    private Boolean personaNatural = Boolean.TRUE;
    private Boolean disponibilidad = true;
    private int estadoVenta = 1;
    private Tipodocumentoidentidad objetoTipoDocumentoIdentidad;
    private int id_venta = 0;
    private Boolean reservado = false;
    private Boolean promocion = false;
    private Boolean sexopersona;
private Agencia objetoAgencia;
private Seriecomprobante objetoSerieComprobante;
    public ManagedBeanVenta() {
        objetoVentasMostrar = new Ventas();
        objetoVentas = new Ventas();
        ObjetoViaje = new Viaje();
        ObjetoViaje.setBus(new Bus());
        ObjetoViaje.getBus().setBusRutaImagen("../images/BUSS.png");
        lista = new LinkedList<Ventas>();
        objetoCliente = new Cliente();
        objetoTipoDocumentoIdentidad = new Tipodocumentoidentidad(3);
        objetoAgencia = new Agencia();
        objetoSerieComprobante = new Seriecomprobante();
        objetoVentasMostrarSerie = new Ventas();
    }

    public Boolean getPromocion() {
        return promocion;
    }

    public void setPromocion(Boolean promocion) {
        this.promocion = promocion;
    }

    
    public Ventas getObjetoVentasMostrarSerie() {
        return objetoVentasMostrarSerie;
    }

    public void setObjetoVentasMostrarSerie(Ventas objetoVentasMostrarSerie) {
        this.objetoVentasMostrarSerie = objetoVentasMostrarSerie;
    }

    public Seriecomprobante getObjetoSerieComprobante() {
        return objetoSerieComprobante;
    }

    public void setObjetoSerieComprobante(Seriecomprobante objetoSerieComprobante) {
        this.objetoSerieComprobante = objetoSerieComprobante;
    }

    


    public Agencia getObjetoAgencia() {
        System.out.println(" ese "+objetoAgencia);
        return objetoAgencia;
    }

      public Agencia objetoAgenciaLista(ManagedBeanIniciosesion logeo) {
          System.out.println("entro conm :" +objetoAgencia);
        if(objetoAgencia.getIdAgencia()==null){
            objetoAgencia =logeo.getObjetoEmpleado().getAgencia();
        }
        this.asignandoserie();
        return objetoAgencia;
    }
    public void setObjetoAgencia(Agencia objetoAgencia) {
        this.objetoAgencia = objetoAgencia;
    }

    public Boolean getReservado() {
        Calendar calendario = new GregorianCalendar();
                        int hora, minutos, segundos;
                        hora = calendario.get(Calendar.HOUR_OF_DAY);
                        minutos = calendario.get(Calendar.MINUTE);
                     int resultado = (Integer.parseInt(ObjetoViaje.getViaHoraSalida().substring(0, 2)) * 60 + Integer.parseInt(ObjetoViaje.getViaHoraSalida().substring(3, 5))) - (hora * 60 + minutos);
                        // System.out.println(" diferencia xd : " + resultado);
                        if (resultado < 180) {
                            // System.out.println("NO puede reservar por la hora.");
                          reservado=false;  
                        }
        return reservado;
    }

    public void setReservado(Boolean reservado) {
        this.reservado = reservado;
    }

    public int getNumeroAsientoMostrando() {
        objetoVentasMostrar = new Ventas();
        if (numeroAsientoMostrando != 0) {
            for (Ventas a : ObjetoViaje.getVentasList()) {
                // System.out.println(" TEST XD " + a.getVenEstado() + " VVV " + a.getVenNroAsiento() + " MM " + a.getVenestadoAsiento());
                // falto aqui agregarle el estado del asiento. hay que verificar los estados, asumimos que numero 1 es para disponible
                if ((a.getVenEstado() == 1 || a.getVenEstado() == 2) && a.getVenNroAsiento() == numeroAsientoMostrando && a.getVenestadoAsiento() == 1) {
                    objetoVentasMostrar = a;
                }
            }
        }


        return numeroAsientoMostrando;
    }

    public void setNumeroAsientoMostrando(int numeroAsientoMostrando) {
        this.numeroAsientoMostrando = numeroAsientoMostrando;
    }

    public Ventas getObjetoVentasMostrar() {
        return objetoVentasMostrar;
    }

    public void setObjetoVentasMostrar(Ventas objetoVentasMostrar) {
        this.objetoVentasMostrar = objetoVentasMostrar;
    }

    public Tipodocumentoidentidad getObjetoTipoDocumentoIdentidad() {
        return objetoTipoDocumentoIdentidad;
    }

    public void setObjetoTipoDocumentoIdentidad(Tipodocumentoidentidad objetoTipoDocumentoIdentidad) {
        this.objetoTipoDocumentoIdentidad = objetoTipoDocumentoIdentidad;
    }

    public int getEstadoVenta() {
        return estadoVenta;
    }

    public void setEstadoVenta(int estadoVenta) {
        this.estadoVenta = estadoVenta;
    }

    public int getId_venta() {
        return id_venta;
    }

    public void setId_venta(int id_venta) {
        this.id_venta = id_venta;
    }

    public Cliente getObjetoCliente() {
        return objetoCliente;
    }

    public void setObjetoCliente(Cliente objetoCliente) {
        this.objetoCliente = objetoCliente;
    }

    public Boolean getDisponibilidad() {
        return disponibilidad;
    }

    public void setDisponibilidad(Boolean disponibilidad) {
        this.disponibilidad = disponibilidad;
    }

    public Boolean getPersonaNatural() {
        return personaNatural;
    }

    public void setPersonaNatural(Boolean personaNatural) {
        this.personaNatural = personaNatural;
    }

    public Ventas getObjetoVentas() {
        return objetoVentas;
    }

    public void setObjetoVentas(Ventas objetoVentas) {
        this.objetoVentas = objetoVentas;
    }

    public List<Ventas> getLista() {
        lista = new LinkedList<Ventas>();
        List<Ventas> listaTemporal = new LinkedList<Ventas>();
        listaTemporal = ventasFacade.findAll();
        for (int i = listaTemporal.size() - 1; i >= 0; i--) {
            if (listaTemporal.get(i).getVenEstado() == 1) {
                lista.add(listaTemporal.get(i));
            }
        }
        return lista;
    }

    public int getNumeroAsiento() {
        return numeroAsiento;
    }

    public int NumeroAsientomostrar() {
        objetoVentasMostrar = new Ventas();
        for (Ventas a : ObjetoViaje.getVentasList()) {
            //asignarle a 
            if (a.getVenEstado() == 1) {
                objetoVentasMostrar = a;
            }
        }
        return numeroAsiento;
    }

    public void setNumeroAsiento(int numeroAsiento) {
        this.numeroAsiento = numeroAsiento;
    }

    public void setLista(List<Ventas> lista) {
        this.lista = lista;
    }

    public Viaje getObjetoViaje() {
        return ObjetoViaje;
    }

    public void setObjetoViaje(Viaje ObjetoViaje) {
        this.ObjetoViaje = ObjetoViaje;
    }

    public Boolean getSexopersona() {
        return sexopersona;
    }

    public void setSexopersona(Boolean sexopersona) {
        this.sexopersona = sexopersona;
    }
    

    public String getRutaeditar() {
        if (ObjetoViaje.getIdViaje() != null) {

            if (ObjetoViaje.getBus().getBusRutaImagen() == null) {
                return "../images/BUSS.png";
            } else {

                return "../" + ObjetoViaje.getBus().getBusRutaImagen();
            }
        }
        return "../images/BUSS.png";
    }

    public String getnueva() {
        //  // System.out.println("jojo " +ObjetoViaje.getBus().getDisenio().getDisNombre());
        ObjetoViaje = viajeFacade.find(ObjetoViaje.getIdViaje());
        return ObjetoViaje.getBus().getDisenio().getDisNombre() + "?faces-redirect=true";
        //      // System.out.println("hoojojoj");
        //  return "Designs1?faces-redirect=true";
    }

    public void Vendiendo(int numAsiento) {
        // System.out.println("Recibiendo Haciento " + numAsiento);
        numeroAsiento = numAsiento;
        //return "formNuevoBoleto";
    }

    public int verificando(int num) {
        int est = 0;
        objetoVentasMostrar = new Ventas();
        lista = new LinkedList<Ventas>();
        List<Ventas> listaTemporal = new LinkedList<Ventas>();
        listaTemporal = ObjetoViaje.getVentasList();

        for (int i = listaTemporal.size() - 1; i >= 0; i--) {
//            // System.out.println("yury asi "+listaTemporal.get(i).getVenNroAsiento()+ "  " +listaTemporal.get(i).getVenestadoAsiento());
            if (listaTemporal.get(i).getVenNroAsiento() == num && listaTemporal.get(i).getVenestadoAsiento() == 1) {
                if (listaTemporal.get(i).getVenEstado() == 1) {
                    est = 1;
                    if(listaTemporal.get(i).getCliente().getPersona().getPerSexo().compareTo('M')==0){
                        sexopersona=true;
                    }else{
                        sexopersona=false;
                    }                    
                } else {
                    //asiento reservado vamos a ver si se pasa de la hora.
                    //   Calendar calendario = Calendar.getInstance();
                    // falta validsar con hora limite de la reserva, para que sea mas dinamico.
                    //


                    // System.out.println(" NOS LLEGA ESTA FECHA DE CREACION : " + listaTemporal.get(i).getViaje().getViaFehaSalida() + " VS " + new Date());

                    if (this.FechaFormateada(listaTemporal.get(i).getViaje().getViaFehaSalida()).equals(this.FechaFormateada(new Date()))) {
                        // System.out.println("ES EL DIA, A VALIDAR");
                        objetoVentasMostrar = listaTemporal.get(i);
                        Calendar calendario = new GregorianCalendar();
                        int hora, minutos, segundos;
                        hora = calendario.get(Calendar.HOUR_OF_DAY);
                        minutos = calendario.get(Calendar.MINUTE);
                        // System.out.println(" veamos : " + listaTemporal.get(i).getViaje().getViaHoraSalida() + " VS " + hora + ":" + minutos);

                        // System.out.println(" SERIA : " + listaTemporal.get(i).getViaje().getViaHoraSalida().substring(0, 2) + "y" + listaTemporal.get(i).getViaje().getViaHoraSalida().substring(3, 5) + " VS " + hora + "yy" + minutos);
                        // System.out.println(" finalmente : " + Integer.parseInt(listaTemporal.get(i).getViaje().getViaHoraSalida().substring(0, 2)) * 60 + "jo" + Integer.parseInt(listaTemporal.get(i).getViaje().getViaHoraSalida().substring(3, 5)) + " VS " + (hora * 60 + minutos));

                        int resultado = (Integer.parseInt(listaTemporal.get(i).getViaje().getViaHoraSalida().substring(0, 2)) * 60 + Integer.parseInt(listaTemporal.get(i).getViaje().getViaHoraSalida().substring(3, 5))) - (hora * 60 + minutos);
                        // System.out.println(" resultado : " + resultado);

                        //  // System.out.println(" con hora limite"+listaTemporal.get(i).);

                        // validar que sea 5 horas o el tiempo que se prgrama el viaje 300 minutos son 5 horas
                        if (resultado < 180) {
                            // System.out.println("HORA DE LIBERAR !");


                            // System.out.println(" vamos  verificar  la lista antes tiene " + ObjetoViaje.getVentasList().size() + " elementos");
                            ObjetoViaje.getVentasList().remove(objetoVentasMostrar);
                            // System.out.println(" vamos  verificar  la lista sacando tiene " + ObjetoViaje.getVentasList().size() + " elementos");

                            objetoVentasMostrar.setVenestadoAsiento(0);
                            objetoVentasMostrar.setVenEstado(0);
                            // System.out.println("Antes !");
                            ventasFacade.edit(objetoVentasMostrar);
                            // vamos a agregar el objeto a la lista reciente.
                            ObjetoViaje.getVentasList().add(objetoVentasMostrar);
                            // System.out.println("despues !");
                            est = 0;
                            return est;
                        } else {
                            // System.out.println("AUN NO ES HORA!  ");
                        }

                    } else {
                        // System.out.println("Debe Pasar !");
                    }

                    est = 2;
                    return est;
                }
            }
        }
        return est;
    }

    public String volver() {
        id_venta = 0;
        ObjetoViaje= viajeFacade.find(ObjetoViaje.getIdViaje());
        String rutaDisenio =objetoVentas.getViaje().getBus().getDisenio().getDisNombre();
        objetoVentas= new Ventas();
        objetoCliente = new Cliente();
        return  rutaDisenio+ "?faces-redirect=true";
    }

    public String resetar() {
        id_venta = 0;
        int id_viaje= ObjetoViaje.getIdViaje();
        ObjetoViaje= new Viaje();
        ObjetoViaje = viajeFacade.find(id_viaje);
        return ObjetoViaje.getBus().getDisenio().getDisNombre() + "?faces-redirect=true";
    }

    public void insertar(Boolean estado, ManagedBeanIniciosesion logeo) {
        // System.out.println("PERSONA NATURAL" + personaNatural);
        id_venta = 0;
        objetoVentas.setViaje(ObjetoViaje);
       // objetoVentas.setVenAgenciaEmisora(logeo.getObjetoEmpleado().getAgencia().getIdAgencia());
        // hay que setar aqui al empleado desde el login
        
        objetoVentas.setEmpleado(logeo.getObjetoEmpleado());

        // no afetca IGV asegurarse que por lo menos tenga 1
        objetoVentas.setIgv(new Igv(1));
        // hay que mapear id de choferes nomas como enteros

        // asignando el tipo de documento
        objetoVentas.setTipodocumentoidentidad(objetoTipoDocumentoIdentidad);

        objetoVentas.setIdChofer1(1);
        objetoVentas.setIdChofer2(1);
        //por ahora nose usa
       // objetoVentas.setSeriecomprobante(new Seriecomprobante(1));
        // vamos a buscar las series.
        for(Seriecomprobante a:ObjetoViaje.getAgencia().getSeriecomprobanteList()){
               // System.out.println(" TEST "+a.getIdSerieComprobante()+" JOJO "+a.getSerieNumero());    
               if(a.getAgencia().equals(ObjetoViaje.getAgencia()) && a.getSerieEstado()==true){
               // hay que validar aqui
                   // System.out.println("Encontro !"+a); 
                   objetoVentas.setSeriecomprobante(a);
               }
        }
        
        
        objetoVentas.setTipocomprobante(new Tipocomprobante(1));
        // System.out.println("Antes");

        Boolean existe = new Boolean(false);


       
        objetoVentas.setTipopago(new Tipopago(estadoVenta));
        
        Viaje ObjetoViajeTemp = viajeFacade.find(ObjetoViaje.getIdViaje());
        // System.out.println(" vamos a refrescar");
        // System.out.println(" disponibilidad ja :"+disponibilidad); 
        disponibilidad = true;
        for (Ventas v : ObjetoViajeTemp.getVentasList()) {
           
          //  // System.out.println(" A VER SEÑOR : VENTA ACIENTO"  +v.getVenNroAsiento()+"DESDE FORM"+numeroAsiento + " ESTADO DE VENTAS "+v.getVenEstado()+" ESTADO DE ASIENTO "+v.getVenestadoAsiento());
            // hay que validar aqui por que parece que solo traee de ventas.
            if ((v.getVenNroAsiento() - numeroAsiento) == 0 && (v.getVenEstado() == 0 && v.getVenestadoAsiento() == 0)) {
                disponibilidad = true;
                // System.out.println(" SU DISPONIBILIDAD " + disponibilidad);
            }
            if ((v.getVenNroAsiento() - numeroAsiento) == 0 && (v.getVenestadoAsiento() == 1 && v.getVenEstado() == 1 || v.getVenEstado() == 2)) {
                disponibilidad = false;
                // System.out.println(" SU DISPONIBILIDAD FALSE " + disponibilidad);
            }
        }
        if (disponibilidad == true) {
            // System.out.println("Asiento LIBRE");

            // verificar codificacion de estados

            // 0 cancelado
            //// 1 pagado
            ///        2 reservado
            // System.out.println("yury  " + reservado);
            if (reservado == true) {
                // System.out.println("SI RESERVADO");
                // reservado
                objetoVentas.setVenEstado(2);
            } else {
                // System.out.println("NO RESERVADO");
                //pagado
                objetoVentas.setVenEstado(1);
            }


            objetoVentas.setVenFecha(ObjetoViaje.getViaFehaSalida());
            objetoVentas.setVenFechaCreacion(new Date());
//        objetoVentas.setVenFechaCreacion(new Date());
            objetoVentas.setVenFechaPostergacion(null);
            objetoVentas.setVenHoraReservaLimite(null);
            
            
            // esto es solo para promociones donde el monto de la venta debe ser cero = 0
            if(promocion==false){
                objetoVentas.setVenMonto(ObjetoViaje.getViaPrecio());
            }else{
                objetoVentas.setVenMonto(ObjetoViaje.getViaPrecio().subtract(ObjetoViaje.getViaPrecio()));
            }
                
            
            
            objetoVentas.setVenNroAsiento(numeroAsiento);
            objetoVentas.setVenPostergado(Boolean.FALSE);
            objetoVentas.setViaje(ObjetoViaje);

            try {
                // System.out.println("antes el id de ventas es" + objetoVentas);
                objetoVentas.setVenestadoAsiento(1);
                ventasFacade.create(objetoVentas);
                // System.out.println("Luego el id de ventas es" + objetoVentas);
                id_venta = objetoVentas.getIdVentas();
                ObjetoViaje.getVentasList().add(objetoVentas);
                // resetando clientes.
                objetoCliente= new Cliente();
                this.generar_boletoPDF(estado,promocion);
                promocion=false;
                estadoVenta=1;
            } catch (Exception e) {
            }

        } else {
            // System.out.println("OCUPADO !");
// resetando el managed Bean, PROBARLO !
             objetoVentasMostrar = new Ventas();
        objetoVentas = new Ventas();
        objetoCliente = new Cliente();
        objetoTipoDocumentoIdentidad = new Tipodocumentoidentidad(3);
        objetoSerieComprobante = new Seriecomprobante();
        objetoVentasMostrarSerie = new Ventas();
        promocion=false;
        estadoVenta=1;
        
        }

        // // System.out.println("jojoj"+objetoVentas.getViaje().getBus().getDisenio());
        //    return objetoVentas.getViaje().getBus().getDisenio().getDisNombre()+"?faces-redirect=true";
    }
@PostConstruct
public void initIt(){
}
    public void generar_boleto() {

        ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext();
        FileWriter fichero = null;
        PrintWriter pw = null;
        SimpleDateFormat fecha_boleta = new SimpleDateFormat("dd/MM/yyyy");

        StringBuilder cadena_fecha_buscar = new StringBuilder(fecha_boleta.format(objetoVentas.getVenFecha()));
        try {
            fichero = new FileWriter(extContext.getRealPath("//ventas//boleto//boleto" + objetoVentas.getIdVentas() + ".txt"));
            pw = new PrintWriter(fichero);
            // verificar y validar datos para clientes naturales y juridicos
            String cliente_string = objetoVentas.getCliente().getPersona().getPerNombres();
            String producto_string = "";

            //  pw.println("  --------  ----" + objetoVentas.getViaje().getAgencia().getEmpresa().getEmpRazSoc() + "  --------  ----");

            //  pw.println("  --------  ---- AGRADECE SU PREFERENCIA !!!  --------  ----");

            pw.println("");
            pw.println("");
            pw.println("");
            pw.println("");
            pw.println(cliente_string + "                          " + objetoVentas.getVenNroDocumento() + "       " + this.FechaFormateada(objetoVentas.getVenFecha()));
            //   pw.println("Fecha: " + cadena_fecha_buscar);
            pw.println("");
            pw.println("");
            pw.println("             " + objetoVentas.getViaje().getRuta().getCiudad().getCiudCiudad() + "       " + objetoVentas.getViaje().getRuta().getCiudad1().getCiudCiudad() + "        " + this.FechaFormateada(objetoVentas.getVenFecha()) + "      " + this.FechaFormateada(objetoVentas.getViaje().getViaFehaSalida()));
            pw.println("        " + this.FechaFormateada(objetoVentas.getViaje().getViaFehaSalida()) + "     " + objetoVentas.getViaje().getViaHoraSalida() + "       " + objetoVentas.getVenNroAsiento());
            pw.println("         " + objetoVentas.getViaje().getViaNominacionPrecio() + "                 " + objetoVentas.getViaje().getViaPrecio() + "       " + objetoVentas.getViaje().getViaHoraSalida());

            pw.println("                            " + objetoVentas.getVenNroAsiento());
            pw.println("");
            pw.println("");
            pw.println("                            " + objetoVentas.getViaje().getViaPrecio());
            pw.println("                       " + objetoVentas.getIdVentas());
            ///     pw.println("RUC:   " + objetoVentas.getViaje().getAgencia().getAgenRUC());
            //     pw.println("AGENCIA   " + objetoVentas.getViaje().getAgencia().getAgenRazSoc());
            //     pw.println("CLIENTE:    " + cliente_string);



            //    pw.println();
            //   pw.println("                                 SALE : " + this.FechaFormateada(objetoVentas.getViaje().getViaFehaSalida()) + "  -  " + objetoVentas.getViaje().getViaHoraSalida());

            //  pw.println("                                 LLEGA : " + this.FechaFormateada(objetoVentas.getViaje().getViaFechaLlegada()) + "  -  " + objetoVentas.getViaje().getViaHoraLlegada());

            //  pw.println("SERVICIO : " + objetoVentas.getViaje().getTiposervicio().getTservTipo());

            //  pw.println("PRECIO(S./): " + objetoVentas.getViaje().getViaPrecio());


        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // Nuevamente aprovechamos el finally para
                // asegurarnos que se cierra el fichero.
                if (null != fichero) {
                    fichero.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
    }

    public void eliminar(ManagedBeanIniciosesion logeo) {
        try {

            // System.out.println(" vamos  verificar  la lista antes tiene " + ObjetoViaje.getVentasList().size() + " elementos");
            ObjetoViaje.getVentasList().remove(objetoVentasMostrar);
            // System.out.println(" vamos  verificar  la lista sacando tiene " + ObjetoViaje.getVentasList().size() + " elementos");
            objetoVentasMostrar.setEmpleado(logeo.getObjetoEmpleado());
            objetoVentasMostrar.setVenestadoAsiento(0);
            objetoVentasMostrar.setVenEstado(0);
            ventasFacade.edit(objetoVentasMostrar);
            // vamos a agregar el objeto a la lista reciente.
            ObjetoViaje.getVentasList().add(objetoVentasMostrar);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void pagar(ManagedBeanIniciosesion logeo) {
        try {

            // System.out.println(" vamos  verificar  la lista antes tiene " + ObjetoViaje.getVentasList().size() + " elementos");
            ObjetoViaje.getVentasList().remove(objetoVentasMostrar);
            // System.out.println(" vamos  verificar  la lista sacando tiene " + ObjetoViaje.getVentasList().size() + " elementos");
            objetoVentasMostrar.setEmpleado(logeo.getObjetoEmpleado());
            objetoVentasMostrar.setVenestadoAsiento(1);
            objetoVentasMostrar.setVenEstado(1);
            ventasFacade.edit(objetoVentasMostrar);
            // vamos a agregar el objeto a la lista reciente.
            ObjetoViaje.getVentasList().add(objetoVentasMostrar);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public void cambiarNumeracion() {
        try {

   
            ventasFacade.edit(objetoVentasMostrarSerie);
          objetoSerieComprobante = new Seriecomprobante();
          objetoVentasMostrarSerie= new Ventas();
                FacesMessage msg = new FacesMessage("CAMBIO REALIZADO", "SE REALIZO EL CAMBIO EN FORMA CORRECTA");
                FacesContext.getCurrentInstance().addMessage(null, msg);
        } catch (Exception e) {
            e.printStackTrace();
            FacesMessage msg = new FacesMessage("ERROR", "OCURRIO UN ERROR");
                FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }
    

    public void postergar(ManagedBeanIniciosesion logeo) {
        try {
            // System.out.println(" vamos  verificar  la lista antes tiene " + ObjetoViaje.getVentasList().size() + " elementos");
            ObjetoViaje.getVentasList().remove(objetoVentasMostrar);
            // System.out.println(" vamos  verificar  la lista sacando tiene " + ObjetoViaje.getVentasList().size() + " elementos");

            objetoVentasMostrar.setEmpleado(logeo.getObjetoEmpleado());
            objetoVentasMostrar.setVenestadoAsiento(0);
            objetoVentasMostrar.setVenEstado(0);
            objetoVentasMostrar.setVenPostergado(true);
            ventasFacade.edit(objetoVentasMostrar);
            // vamos a agregar el objeto a la lista reciente.
            ObjetoViaje.getVentasList().add(objetoVentasMostrar);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public List<String> getImages() {
        images = new ArrayList<String>();
        images.add("../images/imagen1.png");
        images.add("../images/imagen2.png");
        images.add("../images/imagen3.png");
        return images;
    }

    public void probandoTipo() {
        // System.out.println("el tipo es : " + personaNatural);
    }

    public String FechaFormateada(Date fecha) {
        if (fecha != null) {
            StringBuilder cadena_fecha1_11 = new StringBuilder();
            SimpleDateFormat fecha1 = new SimpleDateFormat("dd/MM/yyyy");
            cadena_fecha1_11 = new StringBuilder(fecha1.format(fecha));

            return cadena_fecha1_11.toString();
        }
        return "";

    }

    public void asignandocliente() {
        // System.out.println("el tipo es : " + objetoVentas.getCliente());
        objetoCliente = objetoVentas.getCliente();


        //  if(objetoCliente.getPersona().getPerDNI().length()>3){
        objetoVentas.setVenNroDocumento(objetoCliente.getPersona().getPerDNI());
        // }
    }

     public void asignandoserie() {
         System.out.println("entro a asignar serie" + objetoAgencia);
         if( objetoAgencia.getIdAgencia() != -1 ){
        if( objetoAgencia.getSeriecomprobanteList().isEmpty() ){
            objetoSerieComprobante = new Seriecomprobante();
            objetoVentasMostrarSerie= new Ventas();
        }else{
            for(Seriecomprobante a:objetoAgencia.getSeriecomprobanteList()){
                System.out.println(" ese1234 "+a.getIdSerieComprobante()+" JOJO "+a.getSerieNumero());    
               if(a.getAgencia().equals(objetoAgencia) && a.getSerieEstado()==true){
               // hay que validar aqui
                    System.out.println("Encontro !"+a + " CON "+ a.getVentasList().size());
                objetoSerieComprobante=a;
                if(a.getVentasList().isEmpty()==false){
                    // validar estados.
                    objetoVentasMostrarSerie=a.getVentasList().get(a.getVentasList().size()-1);
                }else{
                    objetoVentasMostrarSerie=new Ventas();
                }
                
               }
        }
        }
        }else{
             objetoSerieComprobante = new Seriecomprobante();
            objetoVentasMostrarSerie= new Ventas();
         }
        
        
        
        
        
      
    }
     
    public int getRetornaID() {
        return objetoVentas.getIdVentas();
    }

    public void generar_boletoPDF(Boolean estado,Boolean promo) {
      //  Rectangle pagesize = new Rectangle(565f, 265f);
        
        
        Rectangle pagesize = new Rectangle(565f, 270f);
        Document document = new Document(pagesize, 1f, 1f, 10f, 0f);

        ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext();
        FileWriter fichero = null;
        PrintWriter pw = null;
        SimpleDateFormat fecha_boleta = new SimpleDateFormat("dd/MM/yyyy");
        objetoVentas = ventasFacade.find(objetoVentas.getIdVentas());
        String cliente_string = objetoVentas.getCliente().getPersona().getPerNombres() + " " + objetoVentas.getCliente().getPersona().getPerApellidos();
        StringBuilder cadena_fecha_buscar = new StringBuilder(fecha_boleta.format(objetoVentas.getVenFecha()));
        try {

            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(extContext.getRealPath("//ventas//boleto//boleto" + objetoVentas.getIdVentas() + ".pdf")));
            document.addAuthor("Yury Daniel Zavaleta De la Cruz");
            document.addCreationDate();
            document.addCreator("iText library");
            document.addTitle("BOLETO DE VENTA");

            document.open();
            writer.addJavaScript("this.print(true);", false);
            String spaciador = "      ";
            String spaciadorlargo = "        ";
            String cuadrolargo = "                                        ";
            String cuadromediano = "         ";
            String cuadrodenominacion = "                ";
            // this.absText("yury daniel", 10, 175, writer);
List<Integer> alturas = new ArrayList<Integer>();
List<Integer> anchuras = new ArrayList<Integer>();
anchuras.add(90);
anchuras.add(360);
anchuras.add(467);
anchuras.add(220);


alturas.add(190);
alturas.add(172);
alturas.add(152);
alturas.add(154);
alturas.add(132);


alturas.add(112);
alturas.add(122);
alturas.add(89);
alturas.add(30);
alturas.add(30);

            if (cliente_string.length() > 40) {
                //  document.add(new Paragraph(spaciador + cliente_string.substring(0, 40)+spaciador+spaciador + objetoVentas.getVenNroDocumento() + spaciador+spaciador+ this.FechaFormateada(objetoVentas.getVenFechaCreacion()), new Font(Font.NORMAL, 7, Font.NORMAL, Color.black)));
                this.absText(cliente_string.substring(0, 40), anchuras.get(0), alturas.get(0), writer);
                this.absText(objetoVentas.getVenNroDocumento(), anchuras.get(1), alturas.get(0), writer);
                this.absText(this.FechaFormateada(objetoVentas.getVenFechaCreacion()), anchuras.get(2), alturas.get(0), writer);

            } else {
                cliente_string = cliente_string + cuadrolargo;
                //  document.add(new Paragraph(spaciador+ cliente_string.substring(0, 40)+spaciador+spaciador + objetoVentas.getVenNroDocumento() + spaciador+spaciador+ this.FechaFormateada(objetoVentas.getVenFechaCreacion()), new Font(Font.NORMAL, 7, Font.NORMAL, Color.black)));
                this.absText(cliente_string.substring(0, 40), anchuras.get(0), alturas.get(0), writer);
                this.absText(objetoVentas.getVenNroDocumento(), anchuras.get(1),alturas.get(0) , writer);
                this.absText(this.FechaFormateada(objetoVentas.getVenFechaCreacion()),anchuras.get(2), alturas.get(0), writer);

            }
            if (estado == true) {
                // System.out.println("generando para natural ");
                // document.add(Chunk.NEWLINE);

            } else {
                // System.out.println("generando para JURIDICO " + objetoVentas.getCliente().getCliRazSoc());
                if (objetoVentas.getCliente().getCliRazSoc().length() > 40) {


                    this.absText(objetoVentas.getCliente().getCliRazSoc().substring(0, 40), anchuras.get(0), alturas.get(1), writer);
                    this.absText(objetoVentas.getCliente().getCliRUC(), anchuras.get(1), alturas.get(1), writer);
                    //document.add(new Paragraph("   " + objetoVentas.getCliente().getCliRazSoc().substring(0, 40)+spaciador + objetoVentas.getCliente().getCliRUC() , new Font(Font.NORMAL, 7, Font.NORMAL, Color.black)));

                } else {

                    objetoVentas.getCliente().setCliRazSoc(objetoVentas.getCliente().getCliRazSoc() + cuadrolargo);

                    this.absText(objetoVentas.getCliente().getCliRazSoc().substring(0, 40), anchuras.get(0), alturas.get(1), writer);
                    this.absText(objetoVentas.getCliente().getCliRUC(), anchuras.get(1), alturas.get(1), writer);

                    // document.add(new Paragraph("   " + objetoVentas.getCliente().getCliRazSoc().substring(0, 40)+spaciador + objetoVentas.getCliente().getCliRUC() , new Font(Font.NORMAL, 7, Font.NORMAL, Color.black)));
                }



            }
            this.absText(objetoVentas.getViaje().getRuta().getCiudad().getCiudCiudad(), anchuras.get(0), alturas.get(2), writer);
            this.absText(objetoVentas.getViaje().getRuta().getCiudad1().getCiudCiudad(), anchuras.get(3), alturas.get(2), writer);
            this.absText(this.FechaFormateada(objetoVentas.getVenFechaCreacion()), anchuras.get(1), alturas.get(2), writer);
            this.absText(this.FechaFormateada(objetoVentas.getViaje().getViaFehaSalida()), anchuras.get(2), alturas.get(3), writer);

            // document.add(new Paragraph("   " + cliente_string + "                          " + objetoVentas.getVenNroDocumento() + "       " + this.FechaFormateada(objetoVentas.getVenFechaCreacion()), new Font(Font.NORMAL, 7, Font.NORMAL, Color.black)));


            //       document.add(new Paragraph(spaciador +spaciador+ objetoVentas.getViaje().getRuta().getCiudad().getCiudCiudad() + spaciador+ objetoVentas.getViaje().getRuta().getCiudad1().getCiudCiudad() + spaciador+ this.FechaFormateada(objetoVentas.getVenFechaCreacion()) + spaciador + this.FechaFormateada(objetoVentas.getViaje().getViaFehaSalida()), new Font(Font.NORMAL, 7, Font.NORMAL, Color.black)));

            this.absText(this.FechaFormateada(objetoVentas.getViaje().getViaFehaSalida()), anchuras.get(0), alturas.get(4), writer);
            this.absText(objetoVentas.getViaje().getViaHoraSalida(), anchuras.get(3), alturas.get(4), writer);
            this.absText(objetoVentas.getVenNroAsiento().toString(), anchuras.get(1)+15, alturas.get(4), writer);


            //  document.add(new Paragraph(spaciador +spaciador+ this.FechaFormateada(objetoVentas.getViaje().getViaFehaSalida()) + spaciador + objetoVentas.getViaje().getViaHoraSalida() + spaciador+spaciador + objetoVentas.getVenNroAsiento(), new Font(Font.NORMAL, 7, Font.NORMAL, Color.black)));
            int valor_entero =objetoVentas.getViaje().getViaPrecio().intValue();
          //  System.out.println("yury"+valor_entero);
            NumerosLetras numerosLetras = new NumerosLetras(new BigInteger(String.valueOf(valor_entero)));
          //  NumerosLetras numerosLetras = new NumerosLetras(new BigInteger("25"));
            
            String letras = numerosLetras.getLetras();
            double total=0;
            DecimalFormat df = new DecimalFormat("0.00");
            total = Math.rint(objetoVentas.getViaje().getViaPrecio().doubleValue() * 100) / 100;//redondear a 2 decimales 
            String cad = df.format(total);
            System.out.println("aqui" +letras);
            String[] cadena = cad.split("\\,");
            String partentera = cadena[0];
            String pd = cadena[1];
            if (cadena[1].length() == 1) {
                pd = cadena[1] + "0";
            }
            String promocion="";
            // esto es solo para promociones donde el monto de la venta debe ser cero = 0
            if(promo==false){
               promocion="";
            }else{
               promocion=",  PROMOCION ";
            }
            
            this.absText( letras + " y " + pd + "/100", anchuras.get(0), alturas.get(5), writer);
            this.absText( objetoVentas.getIdVentas().toString() + promocion, anchuras.get(0), alturas.get(5)-37, writer);
            Double valor =objetoVentas.getViaje().getViaPrecio().doubleValue();
            df = new DecimalFormat("0.00");
            this.absText(df.format(valor), anchuras.get(1), alturas.get(5), writer);
            this.absText(objetoVentas.getViaje().getViaHoraSalida(), anchuras.get(2), alturas.get(6), writer);

            //  document.add(new Paragraph(spaciador+ objetoVentas.getViaje().getViaNominacionPrecio() + spaciadorlargo + objetoVentas.getViaje().getViaPrecio() + spaciador + objetoVentas.getViaje().getViaHoraSalida(), new Font(Font.NORMAL, 7, Font.NORMAL, Color.black)));

            this.absText(objetoVentas.getVenNroAsiento().toString(), anchuras.get(2)+15, alturas.get(7), writer);
            
            this.absText(df.format(valor), anchuras.get(2)+55, alturas.get(8), writer);

            //  document.add(new Paragraph(spaciadorlargo + objetoVentas.getVenNroAsiento(), new Font(Font.NORMAL, 7, Font.NORMAL, Color.black)));
            // document.add(Chunk.NEWLINE);
            // document.add(Chunk.NEWLINE);
            //  document.add(new Paragraph(spaciadorlargo + objetoVentas.getViaje().getViaPrecio(), new Font(Font.NORMAL, 7, Font.NORMAL, Color.black)));

           this.absText("  "+objetoVentas.getVenNumeracion(), 250, alturas.get(9), writer);
            // document.add(new Paragraph(spaciadorlargo + objetoVentas.getIdVentas(), new Font(Font.NORMAL, 7, Font.NORMAL, Color.black)));

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // Nuevamente aprovechamos el finally para
                // asegurarnos que se cierra el fichero.

                if (null != fichero) {
                    fichero.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        document.close();
    }

    private static void absText(String text, int x, int y, PdfWriter writer) {
        try {
            PdfContentByte cb = writer.getDirectContent();
            BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
            cb.saveState();
            cb.beginText();
            cb.moveText(x, y);
            cb.setFontAndSize(bf, 10);
            cb.showText(text);
            cb.endText();
            cb.restoreState();
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void manifiesto() {
        // System.out.println("entro !");
        List<Ventas> listaTemporal = new LinkedList<Ventas>();
        List<Ventas> listatotal_llenar = new LinkedList<Ventas>();
        Viaje ObjetoViaje_temp = viajeFacade.find(ObjetoViaje.getIdViaje());
        listaTemporal = ObjetoViaje_temp.getVentasList();
        Document document  = new Document(PageSize.A4,36,36,100,100);

        ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext();
        FileWriter fichero = null;
        PrintWriter pw = null;
        SimpleDateFormat fecha_boleta = new SimpleDateFormat("dd/MM/yyyy");
//        String cliente_string = objetoVentas.getCliente().getPersona().getPerNombres() + " " + objetoVentas.getCliente().getPersona().getPerApellidos();
//        StringBuilder cadena_fecha_buscar = new StringBuilder(fecha_boleta.format(objetoVentas.getVenFecha()));
        try {

            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(extContext.getRealPath("//ventas//manifiestos//viaje" + ObjetoViaje.getIdViaje() + ".pdf")));
            document.addAuthor("Yury Daniel Zavaleta De la Cruz");
            document.addCreationDate();
            document.addCreator("iText library");
            document.addTitle("MANIFIESTO DE VIAJE");
           // document.setMargins(36, 36, 100, 100);
            document.setMarginMirroring(true);
            document.open();
            writer.addJavaScript("this.print(true);", false);
            String spaciador = "      ";
            String spaciadorlargo = "        ";
            String cuadrolargo = "                                        ";
            String cuadromediano = "         ";
            String cuadrodenominacion = "                ";
            // this.absText("yury daniel", 10, 175, writer);
Font fondo=  new Font(Font.NORMAL, 9, Font.BOLD, Color.black);
Font fondo2=  new Font(Font.NORMAL, 11, Font.BOLD, Color.black);
            for (int i = listaTemporal.size() - 1; i >= 0; i--) {

                if (listaTemporal.get(i).getVenEstado() == 1 && listaTemporal.get(i).getVenestadoAsiento() == 1) {
                    // solo entran los que tienen estado 1 osea vendido y estado de asiento 1 disponible
                    //  document.add(new Paragraph("", new Font(Font.NORMAL, 7, Font.NORMAL, Color.black)));
                    listatotal_llenar.add(listaTemporal.get(i));

                }
            }
           // document.add(new Paragraph("\n", new Font(Font.NORMAL, 7, Font.NORMAL, Color.black)));
          //  document.add(new Paragraph("\n", new Font(Font.NORMAL, 7, Font.NORMAL, Color.black)));
           // document.add(new Paragraph("\n", new Font(Font.NORMAL, 7, Font.NORMAL, Color.black)));

            document.add(new Paragraph("CHOFER 1 :"+ObjetoViaje.getEmpleado1().getPersona().getPerApellidos()+"  " + ObjetoViaje.getEmpleado1().getPersona().getPerNombres()+"       BREVETE: "+ObjetoViaje.getEmpleado1().getEmpNumBrevete(), fondo2));
            //document.add(new Paragraph("CHOFER 2 : "+ObjetoViaje.getEmpleado().getPersona().getPerApellidos() + "  " + ObjetoViaje.getEmpleado().getPersona().getPerNombres(), fondo2));
           
            // document.add(new Paragraph("CHOFER 1 :", new Font(Font.NORMAL, 7, Font.NORMAL, Color.black)));
           // document.add(new Paragraph(ObjetoViaje.getEmpleado1().getPersona().getPerApellidos() + "  " + ObjetoViaje.getEmpleado1().getPersona().getPerNombres(), new Font(Font.NORMAL, 7, Font.NORMAL, Color.black)));
           // document.add(new Paragraph("    CHOFER 2 : "+ObjetoViaje.getEmpleado().getPersona().getPerApellidos() + "  " + ObjetoViaje.getEmpleado().getPersona().getPerNombres(), new Font(Font.NORMAL, 7, Font.NORMAL, Color.black)));
         //   document.add(new Paragraph(ObjetoViaje.getEmpleado().getPersona().getPerApellidos() + "  " + ObjetoViaje.getEmpleado().getPersona().getPerNombres(), new Font(Font.NORMAL, 7, Font.NORMAL, Color.black)));


            document.add(new Paragraph("PLACA Y MARCA DEL VEHÍCULO : " + ObjetoViaje.getBus().getBusPlacaRodaje() + " - " + ObjetoViaje.getBus().getMarca().getMarMarca(), fondo2));
           // document.add(new Paragraph("CERTIFICADO HABILITACION MTC : " + ObjetoViaje.getBus().getBusNroAutorizacionTransp(), new Font(Font.NORMAL, 7, Font.NORMAL, Color.black)));
          

          //  document.add(new Paragraph("ASIENTOS PASAJEROS 1 PISO: " + ObjetoViaje.getBus().getBusNroAsientos1(), new Font(Font.NORMAL, 7, Font.NORMAL, Color.black)));

            document.add(new Paragraph("CIUDAD DE ORIGEN: " + ObjetoViaje.getRuta().getCiudad().getCiudCiudad()+ "         CIUDAD DE DESTINO: " + ObjetoViaje.getRuta().getCiudad1().getCiudCiudad(),fondo2));
         //   document.add(new Paragraph("CIUDAD DE DESTINO: " + ObjetoViaje.getRuta().getCiudad1().getCiudCiudad(), new Font(Font.NORMAL, 7, Font.NORMAL, Color.black)));

            document.add(new Paragraph("FECHA Y HORA DE PARTIDA: " + this.FechaFormateada(ObjetoViaje.getViaFehaSalida()) + "  " + ObjetoViaje.getViaHoraSalida(), fondo2));
            document.add(new Paragraph("ASIENTOS TRIPULACIÓN :     2 "+"         ASIENTOS PASAJEROS 1 PISO: " + ObjetoViaje.getBus().getBusNroAsientos1(), fondo2));
             document.add(new Paragraph("PASAJEROS EMBARCADOS   " + listatotal_llenar.size(), fondo2));
            Double total = 0.0;




            // COMENZAMOS CON EL CUERPO DE LA TABLA



            ArrayList alist2 = new ArrayList();

            // PdfPCell cell =
            // 	new PdfPCell(new Paragraph("header with colspan 3"));


            ArrayList<PdfPCell> lista_titulos_columnas = new ArrayList();
            ArrayList<String> seleccionados = new ArrayList();
            ArrayList<PdfPCell> lista_datos_columnas = new ArrayList();
          
            seleccionados.add("ASIENTO");
            seleccionados.add("PASAJEROS        ");
            seleccionados.add("TIPO DOC IDENT");
            seleccionados.add("NUM DOC. IDENT");
            
            seleccionados.add("NUM. VENTA");
            seleccionados.add("IMPORTE");


            for (String a : seleccionados) {

                Paragraph texto_celda = new Paragraph(a, new Font(Font.NORMAL, 7, Font.BOLDITALIC, Color.black));


                PdfPCell cell = new PdfPCell(new Paragraph(texto_celda));
                cell.setHorizontalAlignment(Element.ALIGN_CENTER);


                //cell.setBorder(Rectangle.RECTANGLE);
                cell.setBorderWidth(0.7f);
               // cell.setBackgroundColor(new Color(190, 218, 235));
                lista_titulos_columnas.add(cell);

            }
            PdfPTable table = new PdfPTable(lista_titulos_columnas.size());
            table.setWidthPercentage(100);
            for (int i = 0; i < lista_titulos_columnas.size(); i++) {

                table.addCell(lista_titulos_columnas.get(i));
            }
            int numero_row = 2;
            Paragraph texto_celda = null;
            this.getLista_ordenada(listatotal_llenar);
            for (int i = listatotal_llenar.size() - 1; i >= 0; i--) {


                
                texto_celda = new Paragraph(listatotal_llenar.get(i).getVenNroAsiento().toString(), fondo);
               PdfPCell cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_CENTER);
                cell2.setBorderWidth(0.7f);
               // cell2.setBackgroundColor(new Color(190, 218, 235));
                if ((numero_row % 2) == 0) {
                    cell2.setBorderWidth(0.5f);
                   // cell2.setBackgroundColor(new Color(241, 248, 250));
                }
                table.addCell(cell2);
                
                
                texto_celda = new Paragraph(listatotal_llenar.get(i).getCliente().getPersona().getPerApellidos() + " " + listatotal_llenar.get(i).getCliente().getPersona().getPerNombres(), fondo);
                PdfPCell cell = new PdfPCell(new Paragraph(texto_celda));
                cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                cell.setBorderWidth(0.7f);
            //    cell.setBackgroundColor(new Color(190, 218, 235));
                if ((numero_row % 2) == 0) {
                    cell.setBorderWidth(0.5f);
                  //  cell.setBackgroundColor(new Color(241, 248, 250));
                }
                table.addCell(cell);



                texto_celda = new Paragraph(listatotal_llenar.get(i).getTipodocumentoidentidad().getTipodocDocumento(), fondo);
                cell = new PdfPCell(new Paragraph(texto_celda));
                cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                cell.setBorderWidth(0.7f);
             //   cell.setBackgroundColor(new Color(190, 218, 235));
                if ((numero_row % 2) == 0) {
                    cell.setBorderWidth(0.5f);
                   // cell.setBackgroundColor(new Color(241, 248, 250));
                }
                table.addCell(cell);

                texto_celda = new Paragraph(listatotal_llenar.get(i).getVenNroDocumento(), fondo);
                cell = new PdfPCell(new Paragraph(texto_celda));
                cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                cell.setBorderWidth(0.7f);
               // cell.setBackgroundColor(new Color(190, 218, 235));
                if ((numero_row % 2) == 0) {
                    cell.setBorderWidth(0.5f);
                   // cell.setBackgroundColor(new Color(241, 248, 250));
                }
                table.addCell(cell);



                

                texto_celda = new Paragraph(listatotal_llenar.get(i).getVenNumeracion(), fondo);
                cell = new PdfPCell(new Paragraph(texto_celda));
                cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                cell.setBorderWidth(0.7f);
             //   cell.setBackgroundColor(new Color(190, 218, 235));
                if ((numero_row % 2) == 0) {
                    cell.setBorderWidth(0.5f);
                  //  cell.setBackgroundColor(new Color(241, 248, 250));
                }

                table.addCell(cell);
                Double monto = listatotal_llenar.get(i).getVenMonto().doubleValue();
                texto_celda = new Paragraph(monto.toString(), fondo);
                cell = new PdfPCell(new Paragraph(texto_celda));
                cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                cell.setBorderWidth(0.7f);
               // cell.setBackgroundColor(new Color(190, 218, 235));
                if ((numero_row % 2) == 0) {
                    cell.setBorderWidth(0.5f);
                    // cell.setBackgroundColor(new Color(241, 248, 250));
                }
                table.addCell(cell);


                //    document.add(new Paragraph(listatotal_llenar.get(i).getCliente().getPersona().getPerApellidos() + " " + listatotal_llenar.get(i).getCliente().getPersona().getPerNombres() + " " + listatotal_llenar.get(i).getTipodocumentoidentidad().getTipodocDocumento() + " " + listatotal_llenar.get(i).getVenNroDocumento() + " " + listatotal_llenar.get(i).getVenNroAsiento() + " " + listatotal_llenar.get(i).getIdVentas() + " " + listatotal_llenar.get(i).getVenMonto(), new Font(Font.NORMAL, 7, Font.NORMAL, Color.black)));
                total = total + listatotal_llenar.get(i).getVenMonto().doubleValue();
                numero_row = numero_row + 1;
            }
            float[] columnWidths = new float[] {12f, 60f, 20f, 20f,30f, 12f};
            table.setWidths(columnWidths);

            document.add(new Paragraph("\n", fondo));
            document.add(new Paragraph("\n", fondo));

            document.add(table);









            //for (int i = listatotal_llenar.size() - 1; i >= 0; i--) {

            // document.add(new Paragraph(listatotal_llenar.get(i).getCliente().getPersona().getPerApellidos()+ " "+listatotal_llenar.get(i).getCliente().getPersona().getPerNombres()+" "+listatotal_llenar.get(i).getTipodocumentoidentidad().getTipodocDocumento()+" "+listatotal_llenar.get(i).getVenNroDocumento()+" "+listatotal_llenar.get(i).getVenNroAsiento()+" "+listatotal_llenar.get(i).getIdVentas()+" "+listatotal_llenar.get(i).getVenMonto(), new Font(Font.NORMAL, 7, Font.NORMAL, Color.black)));
//total=total+listatotal_llenar.get(i).getVenMonto().doubleValue();
            //  }
            document.add(new Paragraph("TOTAL : " + total, fondo));



        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // Nuevamente aprovechamos el finally para
                // asegurarnos que se cierra el fichero.

                if (null != fichero) {
                    fichero.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        document.close();
    }

    public int getIdViajeManifiesto() {
        this.manifiesto();
        // aqui biene el swich;
        
       /*  this.mapa(); */
        
      //  System.out.println(ObjetoViaje.getBus().getDisenio().getDisNombre());
        if(ObjetoViaje.getBus().getDisenio().getDisNombre().equals("TIB956")){
          this.mapaTIB956();  
        }
        if(ObjetoViaje.getBus().getDisenio().getDisNombre().equals("UD3392")){
          this.mapaUD3392();  
        }
        
        if(ObjetoViaje.getBus().getDisenio().getDisNombre().equals("UD3394")){
          this.mapaUD3394();
        }
        
        if(ObjetoViaje.getBus().getDisenio().getDisNombre().equals("UD4022")){
          this.mapaUD4022();
        }
        
        if(ObjetoViaje.getBus().getDisenio().getDisNombre().equals("VG7366")){
          this.mapaVG7366();
        }
        return ObjetoViaje.getIdViaje();
    }
    
    
    
    public void getLista_ordenada(List<Ventas>  lista) {
              int size = lista.size();
              List<Ventas> no_ordenada = new ArrayList<Ventas>();
         List<Ventas> ordenada = new ArrayList<Ventas>();
         no_ordenada = lista;
          Ventas act = new Ventas();
              if(size > 1){

                for(int i =0 ; i< size; i++){
                 act =this.ultimo(no_ordenada);
                 ordenada.add(act);
            //     no_ordenada.remove(act);
                }
                  
              }
// esta es
    // ordenada.addAll(lista);
      


          // aqui se agrega al ultimo a la lista.
     lista.addAll(ordenada);
          }
    
    
     public Ventas ultimo (List<Ventas>  lista_) {
           Ventas uno = lista_.get(0);
           int size = lista_.size();
               for(int i =0 ; i< size; i++)
           {
               //  if(lista_.get(i).getFecha().before(uno.getFecha())){
               if(lista_.get(i).getVenNroAsiento()>uno.getVenNroAsiento()){
                 uno = lista_.get(i);
                                  }
           }

         lista_.remove(uno);
               return uno;
          }
public int getDiferenciaminutos(){
     Calendar calendario = new GregorianCalendar();
                        int hora, minutos, segundos;
                        hora = calendario.get(Calendar.HOUR_OF_DAY);
                        minutos = calendario.get(Calendar.MINUTE);
                     int resultado = (Integer.parseInt(ObjetoViaje.getViaHoraSalida().substring(0, 2)) * 60 + Integer.parseInt(ObjetoViaje.getViaHoraSalida().substring(3, 5))) - (hora * 60 + minutos);
                        
                        if (resultado < 180 && this.FechaFormateada(ObjetoViaje.getViaFehaSalida()).equals(this.FechaFormateada(new Date()))) {
                          // System.out.println(" diferencia xd : " + resultado);
                            return 0;
                        }else{
                            // aun es hora.
                            return 1;
                        }
                            
    
}
   


  public void mapa() {
        // System.out.println("entro !");
        List<Ventas> listaTemporal = new LinkedList<Ventas>();
        List<Ventas> listatotal_llenar = new LinkedList<Ventas>();
        //ArrayList<PdfPCell> listatotal_llenar = new ArrayList();
        Viaje ObjetoViaje_temp = viajeFacade.find(ObjetoViaje.getIdViaje());
        listaTemporal = ObjetoViaje_temp.getVentasList();
        Document document  = new Document(PageSize.A4,36,36,100,100);

        ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext();
        FileWriter fichero = null;
        PrintWriter pw = null;
        SimpleDateFormat fecha_boleta = new SimpleDateFormat("dd/MM/yyyy");
//        String cliente_string = objetoVentas.getCliente().getPersona().getPerNombres() + " " + objetoVentas.getCliente().getPersona().getPerApellidos();
//        StringBuilder cadena_fecha_buscar = new StringBuilder(fecha_boleta.format(objetoVentas.getVenFecha()));
        try {

            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(extContext.getRealPath("//ventas//manifiestos//Mapaviaje" + ObjetoViaje.getIdViaje() + ".pdf")));
            document.addAuthor("Yury Daniel Zavaleta De la Cruz");
            document.addCreationDate();
            document.addCreator("iText library");
            document.addTitle("MANIFIESTO DE VIAJE");
           // document.setMargins(36, 36, 100, 100);
            document.setMarginMirroring(true);
            document.open();
            writer.addJavaScript("this.print(true);", false);
            String spaciador = "      ";
            String spaciadorlargo = "        ";
            String cuadrolargo = "                                        ";
            String cuadromediano = "         ";
            String cuadrodenominacion = "                ";
            // this.absText("yury daniel", 10, 175, writer);
Font fondo=  new Font(Font.NORMAL, 9, Font.BOLD, Color.black);
Font fondo2=  new Font(Font.NORMAL, 7, Font.BOLD, Color.black);



PdfPCell cell2 = new PdfPCell(new Paragraph(""));
     Paragraph texto_celda = null;       
            
                
               
                
            for (int i = listaTemporal.size() - 1; i >= 0; i--) {

                if (listaTemporal.get(i).getVenEstado() == 1 && listaTemporal.get(i).getVenestadoAsiento() == 1) {
                  listatotal_llenar.add(listaTemporal.get(i));
                }
            }
            document.add(new Paragraph("CIUDAD DE ORIGEN: " + ObjetoViaje.getRuta().getCiudad().getCiudCiudad()+ " CIUDAD DE DESTINO: " + ObjetoViaje.getRuta().getCiudad1().getCiudCiudad(),fondo2));
            document.add(new Paragraph("FECHA Y HORA DE PARTIDA: " + this.FechaFormateada(ObjetoViaje.getViaFehaSalida()) + "  " + ObjetoViaje.getViaHoraSalida(), fondo2));
            
            
            ArrayList<PdfPCell> lista_titulos_columnas = new ArrayList();
            ArrayList<String> seleccionados = new ArrayList();
            seleccionados.add("VENTANA");
            seleccionados.add("CORREDOR");
            seleccionados.add("PASADIZO");
            seleccionados.add("CORREDOR");
            seleccionados.add("VENTANA");
           
           for (String a : seleccionados) {

                 texto_celda = new Paragraph(a, fondo2);
                 PdfPCell cell = new PdfPCell(new Paragraph(texto_celda));
                cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                cell.setBorderWidth(0.7f);
                lista_titulos_columnas.add(cell);

            }
            PdfPTable table = new PdfPTable(lista_titulos_columnas.size());
            table.setWidthPercentage(100);
            for (int i = 0; i < lista_titulos_columnas.size(); i++) {

                table.addCell(lista_titulos_columnas.get(i));
            }
            
            this.llenarDataTabla(table, listatotal_llenar,1,60);
            float[] columnWidths = new float[] {30f, 30f, 50f, 30f,30f};
            table.setWidths(columnWidths);
            document.add(new Paragraph("\n", fondo));
            document.add(new Paragraph("\n", fondo));
            document.add(table);
 
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
             if (null != fichero) {
                    fichero.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        document.close();
    }

  
  
  
  public void mapaTIB956() {
        // System.out.println("entro !");
        List<Ventas> listaTemporal = new LinkedList<Ventas>();
        List<Ventas> listatotal_llenar = new LinkedList<Ventas>();
        //ArrayList<PdfPCell> listatotal_llenar = new ArrayList();
        Viaje ObjetoViaje_temp = viajeFacade.find(ObjetoViaje.getIdViaje());
        listaTemporal = ObjetoViaje_temp.getVentasList();
        Document document  = new Document(PageSize.A4,36,36,100,100);

        ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext();
        FileWriter fichero = null;
        PrintWriter pw = null;
        SimpleDateFormat fecha_boleta = new SimpleDateFormat("dd/MM/yyyy");
//        String cliente_string = objetoVentas.getCliente().getPersona().getPerNombres() + " " + objetoVentas.getCliente().getPersona().getPerApellidos();
//        StringBuilder cadena_fecha_buscar = new StringBuilder(fecha_boleta.format(objetoVentas.getVenFecha()));
        try {

            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(extContext.getRealPath("//ventas//manifiestos//Mapaviaje" + ObjetoViaje.getIdViaje() + ".pdf")));
            document.addAuthor("Yury Daniel Zavaleta De la Cruz");
            document.addCreationDate();
            document.addCreator("iText library");
            document.addTitle("MANIFIESTO DE VIAJE");
           // document.setMargins(36, 36, 100, 100);
            document.setMarginMirroring(true);
            document.open();
            writer.addJavaScript("this.print(true);", false);
            String spaciador = "      ";
            String spaciadorlargo = "        ";
            String cuadrolargo = "                                        ";
            String cuadromediano = "         ";
            String cuadrodenominacion = "                ";
            // this.absText("yury daniel", 10, 175, writer);
Font fondo=  new Font(Font.NORMAL, 9, Font.BOLD, Color.black);
Font fondo2=  new Font(Font.NORMAL, 7, Font.BOLD, Color.black);



PdfPCell cell2 = new PdfPCell(new Paragraph(""));
     Paragraph texto_celda = null;       
            
                
               
                
            for (int i = listaTemporal.size() - 1; i >= 0; i--) {

                if (listaTemporal.get(i).getVenEstado() == 1 && listaTemporal.get(i).getVenestadoAsiento() == 1) {
                  listatotal_llenar.add(listaTemporal.get(i));
                }
            }
            document.add(new Paragraph("CIUDAD DE ORIGEN: " + ObjetoViaje.getRuta().getCiudad().getCiudCiudad()+ " CIUDAD DE DESTINO: " + ObjetoViaje.getRuta().getCiudad1().getCiudCiudad(),fondo2));
            document.add(new Paragraph("FECHA Y HORA DE PARTIDA: " + this.FechaFormateada(ObjetoViaje.getViaFehaSalida()) + "  " + ObjetoViaje.getViaHoraSalida(), fondo2));
            
            
            ArrayList<PdfPCell> lista_titulos_columnas = new ArrayList();
            ArrayList<String> seleccionados = new ArrayList();
            seleccionados.add("VENTANA");
            seleccionados.add("CORREDOR");
            seleccionados.add("PASADIZO");
            seleccionados.add("CORREDOR");
            seleccionados.add("VENTANA");
           
           for (String a : seleccionados) {

                 texto_celda = new Paragraph(a, fondo2);
                 PdfPCell cell = new PdfPCell(new Paragraph(texto_celda));
                cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                cell.setBorderWidth(0.7f);
                lista_titulos_columnas.add(cell);

            }
            PdfPTable table = new PdfPTable(lista_titulos_columnas.size());
            table.setWidthPercentage(100);
            for (int i = 0; i < lista_titulos_columnas.size(); i++) {

                table.addCell(lista_titulos_columnas.get(i));
            }
            
            this.llenarDataTabla(table, listatotal_llenar,1,40);
            
            int encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==43){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres()+"\n"+v.getVenNroDocumento() +" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
             
              texto_celda = new Paragraph(" \n\n\n\n 43", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
            
         
         
             encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==44){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres() +"\n"+v.getVenNroDocumento()+" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
             texto_celda = new Paragraph(" \n\n\n\n 44", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
         
         // corredor
         
         table.addCell("");
         
         
             encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==41){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres() +"\n"+v.getVenNroDocumento()+" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
            texto_celda = new Paragraph(" \n\n\n\n 41", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
         
         
         
             encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==42){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres()+"\n"+v.getVenNroDocumento() +" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
           texto_celda = new Paragraph(" \n\n\n\n 42", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
         
         
         
            
            
            float[] columnWidths = new float[] {30f, 30f, 50f, 30f,30f};
            table.setWidths(columnWidths);
            document.add(new Paragraph("\n", fondo));
            document.add(new Paragraph("\n", fondo));
            document.add(table);
 
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
             if (null != fichero) {
                    fichero.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        document.close();
    }
  
  
  
   public void mapaUD3392() {
        // System.out.println("entro !");
        List<Ventas> listaTemporal = new LinkedList<Ventas>();
        List<Ventas> listatotal_llenar = new LinkedList<Ventas>();
        //ArrayList<PdfPCell> listatotal_llenar = new ArrayList();
        Viaje ObjetoViaje_temp = viajeFacade.find(ObjetoViaje.getIdViaje());
        listaTemporal = ObjetoViaje_temp.getVentasList();
        Document document  = new Document(PageSize.A4,36,36,100,100);

        ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext();
        FileWriter fichero = null;
        PrintWriter pw = null;
        SimpleDateFormat fecha_boleta = new SimpleDateFormat("dd/MM/yyyy");
//        String cliente_string = objetoVentas.getCliente().getPersona().getPerNombres() + " " + objetoVentas.getCliente().getPersona().getPerApellidos();
//        StringBuilder cadena_fecha_buscar = new StringBuilder(fecha_boleta.format(objetoVentas.getVenFecha()));
        try {

            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(extContext.getRealPath("//ventas//manifiestos//Mapaviaje" + ObjetoViaje.getIdViaje() + ".pdf")));
            document.addAuthor("Yury Daniel Zavaleta De la Cruz");
            document.addCreationDate();
            document.addCreator("iText library");
            document.addTitle("MANIFIESTO DE VIAJE");
           // document.setMargins(36, 36, 100, 100);
            document.setMarginMirroring(true);
            document.open();
            writer.addJavaScript("this.print(true);", false);
            String spaciador = "      ";
            String spaciadorlargo = "        ";
            String cuadrolargo = "                                        ";
            String cuadromediano = "         ";
            String cuadrodenominacion = "                ";
            // this.absText("yury daniel", 10, 175, writer);
Font fondo=  new Font(Font.NORMAL, 9, Font.BOLD, Color.black);
Font fondo2=  new Font(Font.NORMAL, 7, Font.BOLD, Color.black);



PdfPCell cell2 = new PdfPCell(new Paragraph(""));
     Paragraph texto_celda = null;       
            
                
               
                
            for (int i = listaTemporal.size() - 1; i >= 0; i--) {

                if (listaTemporal.get(i).getVenEstado() == 1 && listaTemporal.get(i).getVenestadoAsiento() == 1) {
                  listatotal_llenar.add(listaTemporal.get(i));
                }
            }
            document.add(new Paragraph("CIUDAD DE ORIGEN: " + ObjetoViaje.getRuta().getCiudad().getCiudCiudad()+ " CIUDAD DE DESTINO: " + ObjetoViaje.getRuta().getCiudad1().getCiudCiudad(),fondo2));
            document.add(new Paragraph("FECHA Y HORA DE PARTIDA: " + this.FechaFormateada(ObjetoViaje.getViaFehaSalida()) + "  " + ObjetoViaje.getViaHoraSalida(), fondo2));
            
            
            ArrayList<PdfPCell> lista_titulos_columnas = new ArrayList();
            ArrayList<String> seleccionados = new ArrayList();
            seleccionados.add("VENTANA");
            seleccionados.add("CORREDOR");
            seleccionados.add("PASADIZO");
            seleccionados.add("CORREDOR");
            seleccionados.add("VENTANA");
           
           for (String a : seleccionados) {

                 texto_celda = new Paragraph(a, fondo2);
                 PdfPCell cell = new PdfPCell(new Paragraph(texto_celda));
                cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                cell.setBorderWidth(0.7f);
                lista_titulos_columnas.add(cell);

            }
            PdfPTable table = new PdfPTable(lista_titulos_columnas.size());
            table.setWidthPercentage(100);
            for (int i = 0; i < lista_titulos_columnas.size(); i++) {

                table.addCell(lista_titulos_columnas.get(i));
            }
            
            this.llenarDataTabla(table, listatotal_llenar,1,16);
            
            int encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==17){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres()+"\n"+v.getVenNroDocumento() +" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
             
              texto_celda = new Paragraph(" \n\n\n\n 17", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
            
         
         
             encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==18){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres() +"\n"+v.getVenNroDocumento()+" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
             texto_celda = new Paragraph(" \n\n\n\n 18", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
         
         // corredor
         
         table.addCell("");
         
         table.addCell("TERRAMOSA");
         table.addCell("");
         
             encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==19){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres() +"\n"+v.getVenNroDocumento()+" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
            texto_celda = new Paragraph(" \n\n\n\n 19", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
         
         
         
             encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==20){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres()+"\n"+v.getVenNroDocumento() +" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
           texto_celda = new Paragraph(" \n\n\n\n 20", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         // corredor
         
         table.addCell("");
         
         table.addCell("CAFETERIA");
         table.addCell("");
         
         
         
         
         
           encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==21){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres() +"\n"+v.getVenNroDocumento()+" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
            texto_celda = new Paragraph(" \n\n\n\n 21", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
         
         
         
             encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==22){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres()+"\n"+v.getVenNroDocumento() +" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
           texto_celda = new Paragraph(" \n\n\n\n 22", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         // corredor
         
         table.addCell("");
         
         table.addCell("PUERTA");
         table.addCell("");
         
   this.llenarDataTabla(table, listatotal_llenar,23,38);      
         
         
         
         
               encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==39){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres() +"\n"+v.getVenNroDocumento()+" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
            texto_celda = new Paragraph(" \n\n\n\n 39", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
         
         
         
             encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==40){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres()+"\n"+v.getVenNroDocumento() +" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
           texto_celda = new Paragraph(" \n\n\n\n 40", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         // corredor
         
              encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==43){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres()+"\n"+v.getVenNroDocumento() +" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
           texto_celda = new Paragraph(" \n\n\n\n 43", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
              encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==41){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres()+"\n"+v.getVenNroDocumento() +" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
           texto_celda = new Paragraph(" \n\n\n\n 41", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
         
              encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==42){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres()+"\n"+v.getVenNroDocumento() +" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
           texto_celda = new Paragraph(" \n\n\n\n 42", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
         
             
            
            float[] columnWidths = new float[] {30f, 30f, 50f, 30f,30f};
            table.setWidths(columnWidths);
            document.add(new Paragraph("\n", fondo));
            document.add(new Paragraph("\n", fondo));
            document.add(table);
 
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
             if (null != fichero) {
                    fichero.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        document.close();
    }
   
   
   
   
   
   
   
 
  public void mapaUD3394() {
        // System.out.println("entro !");
        List<Ventas> listaTemporal = new LinkedList<Ventas>();
        List<Ventas> listatotal_llenar = new LinkedList<Ventas>();
        //ArrayList<PdfPCell> listatotal_llenar = new ArrayList();
        Viaje ObjetoViaje_temp = viajeFacade.find(ObjetoViaje.getIdViaje());
        listaTemporal = ObjetoViaje_temp.getVentasList();
        Document document  = new Document(PageSize.A4,36,36,100,100);

        ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext();
        FileWriter fichero = null;
        PrintWriter pw = null;
        SimpleDateFormat fecha_boleta = new SimpleDateFormat("dd/MM/yyyy");
//        String cliente_string = objetoVentas.getCliente().getPersona().getPerNombres() + " " + objetoVentas.getCliente().getPersona().getPerApellidos();
//        StringBuilder cadena_fecha_buscar = new StringBuilder(fecha_boleta.format(objetoVentas.getVenFecha()));
        try {

            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(extContext.getRealPath("//ventas//manifiestos//Mapaviaje" + ObjetoViaje.getIdViaje() + ".pdf")));
            document.addAuthor("Yury Daniel Zavaleta De la Cruz");
            document.addCreationDate();
            document.addCreator("iText library");
            document.addTitle("MANIFIESTO DE VIAJE");
           // document.setMargins(36, 36, 100, 100);
            document.setMarginMirroring(true);
            document.open();
            writer.addJavaScript("this.print(true);", false);
            String spaciador = "      ";
            String spaciadorlargo = "        ";
            String cuadrolargo = "                                        ";
            String cuadromediano = "         ";
            String cuadrodenominacion = "                ";
            // this.absText("yury daniel", 10, 175, writer);
Font fondo=  new Font(Font.NORMAL, 9, Font.BOLD, Color.black);
Font fondo2=  new Font(Font.NORMAL, 7, Font.BOLD, Color.black);



PdfPCell cell2 = new PdfPCell(new Paragraph(""));
     Paragraph texto_celda = null;       
            
                
               
                
            for (int i = listaTemporal.size() - 1; i >= 0; i--) {

                if (listaTemporal.get(i).getVenEstado() == 1 && listaTemporal.get(i).getVenestadoAsiento() == 1) {
                  listatotal_llenar.add(listaTemporal.get(i));
                }
            }
            document.add(new Paragraph("CIUDAD DE ORIGEN: " + ObjetoViaje.getRuta().getCiudad().getCiudCiudad()+ " CIUDAD DE DESTINO: " + ObjetoViaje.getRuta().getCiudad1().getCiudCiudad(),fondo2));
            document.add(new Paragraph("FECHA Y HORA DE PARTIDA: " + this.FechaFormateada(ObjetoViaje.getViaFehaSalida()) + "  " + ObjetoViaje.getViaHoraSalida(), fondo2));
            
            
            ArrayList<PdfPCell> lista_titulos_columnas = new ArrayList();
            ArrayList<String> seleccionados = new ArrayList();
            seleccionados.add("VENTANA");
            seleccionados.add("CORREDOR");
            seleccionados.add("PASADIZO");
            seleccionados.add("CORREDOR");
            seleccionados.add("VENTANA");
           
           for (String a : seleccionados) {

                 texto_celda = new Paragraph(a, fondo2);
                 PdfPCell cell = new PdfPCell(new Paragraph(texto_celda));
                cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                cell.setBorderWidth(0.7f);
                lista_titulos_columnas.add(cell);

            }
            PdfPTable table = new PdfPTable(lista_titulos_columnas.size());
            table.setWidthPercentage(100);
            for (int i = 0; i < lista_titulos_columnas.size(); i++) {

                table.addCell(lista_titulos_columnas.get(i));
            }
            
            this.llenarDataTabla(table, listatotal_llenar,1,40);
            
            int encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==43){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres()+"\n"+v.getVenNroDocumento() +" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
             
              texto_celda = new Paragraph(" \n\n\n\n 43", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
            
         
         
             encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==44){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres() +"\n"+v.getVenNroDocumento()+" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
             texto_celda = new Paragraph(" \n\n\n\n 44", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
         
         // corredor
         
         table.addCell("");
         
         
             encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==41){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres() +"\n"+v.getVenNroDocumento()+" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
            texto_celda = new Paragraph(" \n\n\n\n 41", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
         
         
         
             encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==42){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres()+"\n"+v.getVenNroDocumento() +" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
           texto_celda = new Paragraph(" \n\n\n\n 42", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
         
         
         table.addCell("");
         table.addCell("");
         table.addCell("");
            
             encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==45){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres()+"\n"+v.getVenNroDocumento() +" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
           texto_celda = new Paragraph(" \n\n\n\n 45", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
         
           encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==46){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres()+"\n"+v.getVenNroDocumento() +" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
           texto_celda = new Paragraph(" \n\n\n\n 46", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
         
            float[] columnWidths = new float[] {30f, 30f, 50f, 30f,30f};
            table.setWidths(columnWidths);
            document.add(new Paragraph("\n", fondo));
            document.add(new Paragraph("\n", fondo));
            document.add(table);
 
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
             if (null != fichero) {
                    fichero.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        document.close();
    }
  
  
   public void mapaUD4022() {
        // System.out.println("entro !");
        List<Ventas> listaTemporal = new LinkedList<Ventas>();
        List<Ventas> listatotal_llenar = new LinkedList<Ventas>();
        //ArrayList<PdfPCell> listatotal_llenar = new ArrayList();
        Viaje ObjetoViaje_temp = viajeFacade.find(ObjetoViaje.getIdViaje());
        listaTemporal = ObjetoViaje_temp.getVentasList();
        Document document  = new Document(PageSize.A4,36,36,100,100);

        ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext();
        FileWriter fichero = null;
        PrintWriter pw = null;
        SimpleDateFormat fecha_boleta = new SimpleDateFormat("dd/MM/yyyy");
//        String cliente_string = objetoVentas.getCliente().getPersona().getPerNombres() + " " + objetoVentas.getCliente().getPersona().getPerApellidos();
//        StringBuilder cadena_fecha_buscar = new StringBuilder(fecha_boleta.format(objetoVentas.getVenFecha()));
        try {

            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(extContext.getRealPath("//ventas//manifiestos//Mapaviaje" + ObjetoViaje.getIdViaje() + ".pdf")));
            document.addAuthor("Yury Daniel Zavaleta De la Cruz");
            document.addCreationDate();
            document.addCreator("iText library");
            document.addTitle("MANIFIESTO DE VIAJE");
           // document.setMargins(36, 36, 100, 100);
            document.setMarginMirroring(true);
            document.open();
            writer.addJavaScript("this.print(true);", false);
            String spaciador = "      ";
            String spaciadorlargo = "        ";
            String cuadrolargo = "                                        ";
            String cuadromediano = "         ";
            String cuadrodenominacion = "                ";
            // this.absText("yury daniel", 10, 175, writer);
Font fondo=  new Font(Font.NORMAL, 9, Font.BOLD, Color.black);
Font fondo2=  new Font(Font.NORMAL, 7, Font.BOLD, Color.black);



PdfPCell cell2 = new PdfPCell(new Paragraph(""));
     Paragraph texto_celda = null;       
            
                
               
                
            for (int i = listaTemporal.size() - 1; i >= 0; i--) {

                if (listaTemporal.get(i).getVenEstado() == 1 && listaTemporal.get(i).getVenestadoAsiento() == 1) {
                  listatotal_llenar.add(listaTemporal.get(i));
                }
            }
            document.add(new Paragraph("CIUDAD DE ORIGEN: " + ObjetoViaje.getRuta().getCiudad().getCiudCiudad()+ " CIUDAD DE DESTINO: " + ObjetoViaje.getRuta().getCiudad1().getCiudCiudad(),fondo2));
            document.add(new Paragraph("FECHA Y HORA DE PARTIDA: " + this.FechaFormateada(ObjetoViaje.getViaFehaSalida()) + "  " + ObjetoViaje.getViaHoraSalida(), fondo2));
            
            
            ArrayList<PdfPCell> lista_titulos_columnas = new ArrayList();
            ArrayList<String> seleccionados = new ArrayList();
            seleccionados.add("VENTANA");
            seleccionados.add("CORREDOR");
            seleccionados.add("PASADIZO");
            seleccionados.add("CORREDOR");
            seleccionados.add("VENTANA");
           
           for (String a : seleccionados) {

                 texto_celda = new Paragraph(a, fondo2);
                 PdfPCell cell = new PdfPCell(new Paragraph(texto_celda));
                cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                cell.setBorderWidth(0.7f);
                lista_titulos_columnas.add(cell);

            }
            PdfPTable table = new PdfPTable(lista_titulos_columnas.size());
            table.setWidthPercentage(100);
            for (int i = 0; i < lista_titulos_columnas.size(); i++) {

                table.addCell(lista_titulos_columnas.get(i));
            }
            
            this.llenarDataTabla(table, listatotal_llenar,1,36);
            
            int encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==37){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres()+"\n"+v.getVenNroDocumento() +" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
             
              texto_celda = new Paragraph(" \n\n\n\n 37", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
            
         
         
             encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==38){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres() +"\n"+v.getVenNroDocumento()+" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
             texto_celda = new Paragraph(" \n\n\n\n 38", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
         
         // corredor
         
         table.addCell("");
          table.addCell("");
         
             encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==41){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres() +"\n"+v.getVenNroDocumento()+" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
            texto_celda = new Paragraph(" \n\n\n\n 41", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
         
         
         
          
         
         
         
             encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==39){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres()+"\n"+v.getVenNroDocumento() +" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
           texto_celda = new Paragraph(" \n\n\n\n 39", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
         
           encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==40){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres()+"\n"+v.getVenNroDocumento() +" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
           texto_celda = new Paragraph(" \n\n\n\n 40", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
         table.addCell("");
         table.addCell("");
         table.addCell("");
            
            float[] columnWidths = new float[] {30f, 30f, 50f, 30f,30f};
            table.setWidths(columnWidths);
            document.add(new Paragraph("\n", fondo));
            document.add(new Paragraph("\n", fondo));
            document.add(table);
 
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
             if (null != fichero) {
                    fichero.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        document.close();
    }
  
   public void mapaVG7366() {
        // System.out.println("entro !");
        List<Ventas> listaTemporal = new LinkedList<Ventas>();
        List<Ventas> listatotal_llenar = new LinkedList<Ventas>();
        //ArrayList<PdfPCell> listatotal_llenar = new ArrayList();
        Viaje ObjetoViaje_temp = viajeFacade.find(ObjetoViaje.getIdViaje());
        listaTemporal = ObjetoViaje_temp.getVentasList();
        Document document  = new Document(PageSize.A4,36,36,100,100);

        ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext();
        FileWriter fichero = null;
        PrintWriter pw = null;
        SimpleDateFormat fecha_boleta = new SimpleDateFormat("dd/MM/yyyy");
//        String cliente_string = objetoVentas.getCliente().getPersona().getPerNombres() + " " + objetoVentas.getCliente().getPersona().getPerApellidos();
//        StringBuilder cadena_fecha_buscar = new StringBuilder(fecha_boleta.format(objetoVentas.getVenFecha()));
        try {

            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(extContext.getRealPath("//ventas//manifiestos//Mapaviaje" + ObjetoViaje.getIdViaje() + ".pdf")));
            document.addAuthor("Yury Daniel Zavaleta De la Cruz");
            document.addCreationDate();
            document.addCreator("iText library");
            document.addTitle("MANIFIESTO DE VIAJE");
           // document.setMargins(36, 36, 100, 100);
            document.setMarginMirroring(true);
            document.open();
            writer.addJavaScript("this.print(true);", false);
            String spaciador = "      ";
            String spaciadorlargo = "        ";
            String cuadrolargo = "                                        ";
            String cuadromediano = "         ";
            String cuadrodenominacion = "                ";
            // this.absText("yury daniel", 10, 175, writer);
Font fondo=  new Font(Font.NORMAL, 9, Font.BOLD, Color.black);
Font fondo2=  new Font(Font.NORMAL, 7, Font.BOLD, Color.black);



PdfPCell cell2 = new PdfPCell(new Paragraph(""));
     Paragraph texto_celda = null;       
            
                
               
                
            for (int i = listaTemporal.size() - 1; i >= 0; i--) {

                if (listaTemporal.get(i).getVenEstado() == 1 && listaTemporal.get(i).getVenestadoAsiento() == 1) {
                  listatotal_llenar.add(listaTemporal.get(i));
                }
            }
            document.add(new Paragraph("CIUDAD DE ORIGEN: " + ObjetoViaje.getRuta().getCiudad().getCiudCiudad()+ " CIUDAD DE DESTINO: " + ObjetoViaje.getRuta().getCiudad1().getCiudCiudad(),fondo2));
            document.add(new Paragraph("FECHA Y HORA DE PARTIDA: " + this.FechaFormateada(ObjetoViaje.getViaFehaSalida()) + "  " + ObjetoViaje.getViaHoraSalida(), fondo2));
            
            
            ArrayList<PdfPCell> lista_titulos_columnas = new ArrayList();
            ArrayList<String> seleccionados = new ArrayList();
            seleccionados.add("VENTANA");
            seleccionados.add("CORREDOR");
            seleccionados.add("PASADIZO");
            seleccionados.add("CORREDOR");
            seleccionados.add("VENTANA");
           
           for (String a : seleccionados) {

                 texto_celda = new Paragraph(a, fondo2);
                 PdfPCell cell = new PdfPCell(new Paragraph(texto_celda));
                cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                cell.setBorderWidth(0.7f);
                lista_titulos_columnas.add(cell);

            }
            PdfPTable table = new PdfPTable(lista_titulos_columnas.size());
            table.setWidthPercentage(100);
            for (int i = 0; i < lista_titulos_columnas.size(); i++) {

                table.addCell(lista_titulos_columnas.get(i));
            }
            
            this.llenarDataTabla(table, listatotal_llenar,1,36);
            
            int encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==37){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres()+"\n"+v.getVenNroDocumento() +" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
             
              texto_celda = new Paragraph(" \n\n\n\n 37", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
            
         
         
             encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==38){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres() +"\n"+v.getVenNroDocumento()+" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
             texto_celda = new Paragraph(" \n\n\n\n 38", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
         
        
         
             encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==41){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres() +"\n"+v.getVenNroDocumento()+" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
            texto_celda = new Paragraph(" \n\n\n\n 41", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
         
         
         
          
         
         
         
             encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==39){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres()+"\n"+v.getVenNroDocumento() +" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
           texto_celda = new Paragraph(" \n\n\n\n 39", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
         
           encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==40){
                 encontro =1;
                 
               texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres()+"\n"+v.getVenNroDocumento() +" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                table.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
           texto_celda = new Paragraph(" \n\n\n\n 40", fondo2);
               cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             table.addCell(cell2);
         }
         
        
            float[] columnWidths = new float[] {30f, 30f, 50f, 30f,30f};
            table.setWidths(columnWidths);
            document.add(new Paragraph("\n", fondo));
            document.add(new Paragraph("\n", fondo));
            document.add(table);
 
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
             if (null != fichero) {
                    fichero.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        document.close();
    }
  
   
   
   public void llenarDataTabla(PdfPTable tabla,List<Ventas> listatotal_llenar,int inicio, int fin){
       // tiene que venir la lista de celdas llenas, con todo el formato con numero y todo !
       // aqui vas llenando noma. validando los que 
      Font fondo2=  new Font(Font.NORMAL, 7, Font.BOLD, Color.black);
    //   System.out.println(" nos llega "+listatotal_llenar.size());
       int data =0;
       for (int valor = inicio;valor <= fin; valor++) {
           data=data+1;
           
         //  if(valor  == 3 || valor  == 8  || valor  == 13 || valor  == 18 || valor  == 23 || valor  == 28 || valor  == 33 || valor  == 38 || valor  == 43 || valor  == 48|| valor  == 53 || valor  == 58 || valor  == 63 || valor  == 68){
         //      tabla.addCell("");
         //  }
          // System.out.println("data :" +data);
           if(data ==3){
             //  System.out.println("data :" +data + "VACIO");
              tabla.addCell(""); 
           }
           if(data ==5){
             data =1; 
            // System.out.println(" RESTEANDO data :" +data);
           }
           int encontro =0;
         for(Ventas v :listatotal_llenar){
             if(v.getVenNroAsiento()==valor){
                 encontro =1;
                
               
                Paragraph texto_celda = new Paragraph(v.getCliente().getPersona().getPerApellidos() + " " + v.getCliente().getPersona().getPerNombres()+"\n"+v.getVenNroDocumento() +" \n\n\n\n "+v.getVenNroAsiento().toString(), fondo2);
              PdfPCell  cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
                 tabla.addCell(cell2);
                 break;
             }
         }  
         if(encontro ==0){
             
               Paragraph texto_celda = new Paragraph(" \n\n\n\n "+String.valueOf(valor), fondo2);
              PdfPCell  cell2 = new PdfPCell(new Paragraph(texto_celda));
                cell2.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell2.setBorderWidth(0.7f);
              
             tabla.addCell(cell2);
         }
               
           
           
       }
   }

   
  public List<Ventas>  ListaPendientesPago(ManagedBeanIniciosesion logeo){
     
      List<Ventas> listaTemporal = new LinkedList<Ventas>();
      List<Ventas> listaTotal = new LinkedList<Ventas>();
      listaTotal = ventasFacade.findAll();
      for(Ventas v: listaTotal){
          // Tipo de pago 2
          if(v.getTipopago().getIdTipoPago()==2 && v.getEmpleado().getAgencia().equals(logeo.getObjetoEmpleado().getAgencia())){
             listaTemporal.add(v);
          }
      }
      return listaTemporal;
  }
  public void onRowSelect(SelectEvent event) {
        FacesMessage msg = new FacesMessage("VENTA SELECCIONADA", ((Ventas) event.getObject()).getVenNumeracion());
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

    public void onRowUnselect(UnselectEvent event) {
        FacesMessage msg = new FacesMessage("VENTA SELECCIONADA", ((Ventas) event.getObject()).getVenNumeracion());

        FacesContext.getCurrentInstance().addMessage(null, msg);
    }
    
    public void pagoBoletoCredito(){
        try {
            // el estado 3 es el estado de CREDITO PAGADO
            objetoVentasMostrar.setTipopago(new Tipopago(3));
            ventasFacade.edit(objetoVentasMostrar);
           } catch (Exception e) {
        }
    }
    
}
